#ifndef _GLOWERBOUND_H_
#define _GLOWERBOUND_H_

#include "gsupplyLinkSolution.h"

class GLowerBound {
 protected :
  GSupplyLinkProblem* problem ;
  int np ;

  double residualCapacity ;

  int    nbrBatchLB ;
  double customerHoldingCostLB ;

 public:
  GLowerBound (GSupplyLinkProblem* pb) ;

  inline int    getNbrBatchLB() {return nbrBatchLB;}
  inline double getCustomerHoldingCostLB() {return customerHoldingCostLB;}

  virtual int  evaluateNewNeededBins(GSupplyLinkSolution& sol, int jobStart)=0 ;
  virtual void evaluate(GSupplyLinkSolution& sol, int jobStart)=0 ;
} ;


/**
 *
 */
class GLowerBoundV0 : public GLowerBound {
 public:
  GLowerBoundV0 (GSupplyLinkProblem* pb):GLowerBound(pb){}
  virtual int  evaluateNewNeededBins(GSupplyLinkSolution& sol, int jobStart) ;
  virtual void evaluate(GSupplyLinkSolution& sol, int jobStart) ;
} ;


/**
 *
 */
class GLowerBoundV1 : public GLowerBound {
 public:
  GLowerBoundV1 (GSupplyLinkProblem* pb):GLowerBound(pb){}
  virtual int  evaluateNewNeededBins(GSupplyLinkSolution& sol, int jobStart) ;
  virtual void evaluate(GSupplyLinkSolution& sol, int jobStart) ;
} ;



#endif
